'use strict';
const moment = require('moment')

module.exports = function (app, opts) {

    let axyTokenCache = {
        userId: null,
        orgId: null,
        token: null,
        expireTime: null //过期时间
    }

    let getAnxinyunToken = async function () {
        try {
            if (!axyTokenCache.token || moment() > moment(axyTokenCache.expireTime)) {
                const dataToAxy = {
                    pcode: 'fce4afe2-5b6a-408a-ab18-a2afa7fa027c',
                    username: '123456',
                    password: '123456',
                }
                const axyResponse = await app.fs.waterReq.post('/login', dataToAxy)
                const axyData = axyResponse.body
                if (axyData.authorized) {
                    axyTokenCache.userId = axyData.id //放进缓存
                    axyTokenCache.orgId = axyData.orgId //放进缓存
                    axyTokenCache.token = axyData.token //放进缓存
                    axyTokenCache.expireTime = moment().add(23, 'hour').format('YYYY-MM-DD HH:mm:ss')
                }
            }
            return axyTokenCache
        } catch (err) {
            app.fs.logger.error(`utils: fetch anxinyun token, error: ${err}`);
        }
    }

    let rslt = {
    };
    async function getDataFromAxy(url, method, data) {
        try {
            if (rslt[url]) {
                getData(url, method, data)
                return rslt[url]
            } else {
                let res = await getData(url, method, data)
                return res
            }
        } catch (err) {
            app.fs.logger.error(`utils: fetch axy sensors Data, error: ${err}`);
        }
    }

    async function getData(url, method = 'get', data) {
        try {
            const res = await app.fs.waterReq[method](`${url}`, data ? { ...data } : {})
            rslt[url] = res
            app.fs.waterCache = rslt
            return res
        } catch (err) {
            app.fs.logger.error(`utils:  error: ${err}`);
        }
    }

    return {
        getAnxinyunToken,
        getDataFromAxy,
    }
}
